/*
 * LowTest.h
 *
 * Created on : 24-05-2014
 *     Author : A.W. Janisse
 *
 * Version 1.0: 24-05-2014, Final release
 */

#include "gtest/gtest.h"
#include "Low.h"

#include "OneEntry.h"

/**
 * Deze test toon aan dat er het object aangemaakt en opgeruimd (delete) kan
 * worden.
 *
 * De test case is geslaag als de instantie van and niet NULL is en er geen runtime
 * error komen.
 */
TEST(LOW, ConstructorDestructorTest)
{
    Low *lowGate = new Low(0,0,"Low");
    ASSERT_TRUE(lowGate != NULL);
    delete lowGate;
}

/**
 * Deze test toon aan dat de logische LOW functie het juiste reslutaat geeft.
 */
TEST(LOW, LogicLowWorksOK)
{
    Low *lowGate = new Low(10, 20, "Low");

    EXPECT_EQ(false, lowGate->getOutputValue());

    delete lowGate;
}

/**
 * Deze test controleert of de LOW gate de juiste drawing instruction levert. De drawing instruction is
 * een string waarin informatie staat over de gate zelf. In de opbouw van de string wordt rekening
 * gehouden met de logische toestand van de gate. Een LOW gate heeft nooit ingangen.
 */
TEST(LOW, GetDrawingInstructions)
{
    // Low is used to reset numbering
    Low *l1 = new Low(0,0,"Low");
    l1->resetNextNumber();

    Gate * g1 = new Low(10, 20, "Low");
    EXPECT_EQ("gate,1,Low,10,20,0,L,L,L\n", g1->getDrawingInstruction());

    Gate * g2 = new Low(40, 50, "Low");
    EXPECT_EQ("gate,2,Low,40,50,0,L,L,L\n", g2->getDrawingInstruction());

    delete l1;
    delete g1;
    delete g2;
}
